package visualcbir.decorators;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import visualcbir.View;
import visualcbir.command.CmdMacro;
import visualcbir.PnlView;
import visualcbir.node.IViewNode;

/**
 *
 * @author sheila
 */
public class FunDragDrop extends Functionality implements MouseListener,MouseMotionListener{
    public FunDragDrop(View oIView, PnlView pnl){
        super(oIView, pnl);       
        this.oPnlView.addMouseListener(this);
    }

    //***************** mouse events *****************************************//
    int flag=0;
    CmdMacro macro;
    void addNodeHlp(CmdMacro macro){flag=1;this.macro=macro;}
    void addEdgeHlp1(CmdMacro macro){flag=2;this.macro=macro;}
    void addEdgeHlp2(CmdMacro macro){flag=3;this.macro=macro;}
    void deleteNodeHlp(){flag=4;}
    void deleteEdgeHlp(){flag=5;}
//    void changeFlagApariencia()
//    { if(flagapariencia==true) flagapariencia=false;
//      else  flagapariencia=true;
//    }

       /*
    flag=0--> Estado normal. LLama al nodo donde se hizo click y lo arrastra
    flag=1--> insertar nodo
    flag=2--> insertar relacion de generalizacion/especializacon
    flag=3--> insertar relacion de agregacion
    flag=4--> borrar node
    flag=5--> borrar edge
    */
   /***************Mouse Listener****************/

     int origem=0;
//flag=3;
// 14 agosto
//   public void mousePressed(MouseEvent event)
//   {
//
//      if (flag == 1)
//      {  //CmdAddNode a=new CmdAddNode(jgrafo, event.getX(), event.getY());
//         //a.execute();  macro.add(a);
//         //flag=0;
//      }
//      if (flag ==0 || flag == 2 || flag==3 ||  flag==5 )
//      {   this.oPnlView.addMouseMotionListener(this);//nodeorigen es el nodo que empieza una relacion o es el nodo que se mueve pick
//          origem=oView.findNode(event.getX(),event.getY());
//          System.out.println("el nodo en el que se hizo click es: "+origem);
//
//          if(origem!=-1)
//          {   IViewNode nodeorigen= oView.getNodeView(origem);
//              oView.setNodePick(nodeorigen);
//              //pick se convierte en el nodo mas cercano al lugar donde se hizo click
//          }
//      }
//      if(flag==4)
//      {   int posborrado = oView.findNode(event.getX(),event.getY());
//          if(posborrado!=-1)
//          {    //oView.deleteNodeEdges(posborrado);
//               System.out.println("Se elimino el nodo: " + posborrado);
//          }
//          flag=0;
//      }
//      this.oPnlView.repaint();
//      //este codigo(flag 0) permite que el nodo mas cercano se coloque en el lugar donde se hizo click
//      //este repaint permite dibujar el nodo al ser insertado(flag 1) y antes de su movimiento(rosado)(flag 2)
//      event.consume();
//    }
//   public void mouseReleased(MouseEvent event)
//   {
//       this.oPnlView.removeMouseMotionListener(this);
//
//       if (oView.getNodePick() != null && flag!=2 && flag!=3  && flag!=5)
//       {   oView.getNodePick().setIx(event.getX());
//           oView.getNodePick().setIy(event.getY());
//           oView.setNodePick(null);
//       }
//       if(flag==2 || flag==3 || flag==5)//relaciones
//       {   int destino=oView.findNode(event.getX(),event.getY());
//
//           if(origem!=-1 && destino!=-1  && origem!=destino)
//           {/* COMENTE TODO ESTO
//              if(flag==2)
//              {
//                  CmdGeneralizacion ge=new CmdGeneralizacion(jgrafo,origen,destino); ge.execute(); macro.add(ge);
//              }
//              else if(flag==3)
//              {   CmdAgregacion ag=new CmdAgregacion(jgrafo,origen,destino);  ag.execute();   macro.add(ag);
//              }
//              else if(flag==5)
//              {
//                  int edgeEncontrado = jgrafo.findEdgeNoDirigido(origen,destino);
//                  if(edgeEncontrado!=-1)
//                  {  jgrafo.deleteEdge(edgeEncontrado);
//                     System.out.println("Relacion eliminada de:"+origen+ " hacia:"+destino);
//                  }
//              }*/
//           }
//           //-------_>flag=0;  oView.setNodePick(null);
//       }
//
//       this.oPnlView.repaint();//este repaint permite dejar al nodo en el lugar donde se solto el mouse
//       event.consume();
//   }
//
//    public void mouseEntered(MouseEvent e){}
//    public void mouseExited(MouseEvent e) {System.out.println("----------------> mouseExited");}
//    public void mouseClicked(MouseEvent e)
//    {
//        if (e.getClickCount() == 2)
//        {   int nodo2click=oView.findNode(e.getX(),e.getY());
//            //AQUIif(nodo2click!=-1) frmDetalle.show();
//        }
//    }
//
//    /*******Mouse Motion Listener************/
//    public void mouseMoved(MouseEvent e) {}
//    public void mouseDragged(MouseEvent event) {
//        System.out.println("mouse draggeddd");
//      if(flag==2 || flag==3 || flag==5)//cuando se desea usarlo como nodo origen y despues hay un destino
//      {   System.out.println("flag ->"+flag);
//          int nodeposible=oView.findNode(event.getX(),event.getY());
//          if (nodeposible!=-1 ){ oView.setNodePick(oView.getNodeView(nodeposible));
//              System.out.println("NODE PICK es el node"+nodeposible);
//          }
//      }
//
//      if(oView.getNodePick()!=null && flag==0)//Cuando se desea mover un nodo
//      {   oView.getNodePick().setIx(event.getX());
//          oView.getNodePick().setIy(event.getY());
//          System.out.println("moviendo el nodepick..xxx->"+oView.getNodePick().getIx());
//        //permite ver el nodo mientras se desplaza de un lugar a otro
//      }
//      this.oPnlView.repaint();
//      //event.consume();
//    }

    @Override
    public void removeAll() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mousePressed(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}
